﻿// owner 蒋家伟

#pragma once

// jsdk
#include "HardwareBase_home.h"
#include "IDeviceExternalData.h"

namespace jsdk
{
    class ISocketEventHandler;
    class IHardwareEventHandler;

    // 类别描述 ：带有套接字的硬件设备的外部数据
    // 实现细节 : 主要内部存储一个套接字与硬件设备的事件监听对象handler
    // 业务逻辑 : 所有的逻辑请在handler里面实现，如果当前设备要求其他设备工作，请创建Task，详情参见ITaskManager。
    // 注册逻辑 ：请使用IDeviceRegisterHelp的 DEVICE_REGISTER 宏注册，把宏放到了cpp文件的空白地方即可，在全局变量初始化的时候注册进去。
    class HARDWAREBASE_EXPORT ISocketHardwareExternalData : public IDeviceExternalData
    {
    public:
        virtual ~ISocketHardwareExternalData() {}

        /// \ 获取 <设备名称>
        virtual const std::wstring getHardwareName() const = 0;

        /// \ 获取 <Socket> 事件的监听者
        virtual ISocketEventHandler* getSocketEventHandler() const = 0;

        /// \ 获取 <硬件> 事件的监听者
        virtual IHardwareEventHandler* getHardwareEventHandler() const = 0;

        /// \ 获取 <Socket> 参数
        /// \ out ipAddress      IP地址
        /// \ out port           端口
        /// \ return bool 表示获取成功，数据有效，否则参数无效
        virtual bool getSocketParameter(std::string& ipAddress, int64_t& port) const = 0;
    };
}